﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace Librerias.CAD
{
    public class CADMuro
    {
        public DataTable GetMuro(string usuario)
        {
            SqlConnection con = new SqlConnection(CADConexion.connString); 

            DataTable res = null;

            con.Open();

            string select =
                "SELECT        muro.murId, muro.murFecha, muro.murEmisor, muro.murReceptor, muro.murAsunto, muro.murMensaje, usuario.usuNombre, usuario.usuApellido1, "+                  
                "usuario.usuApellido2, usuario.usuImagen, numcomen.numero, puntuaciones.total  "+            
                "FROM            muro INNER JOIN "+                         
                "usuario ON muro.murEmisor = usuario.usuCorreo LEFT OUTER JOIN "+                             
                "(SELECT        comUrl, COUNT(*) AS numero "+                               
                "FROM            comentarios "+                               
                "GROUP BY comUrl) AS numcomen ON 'M' + CONVERT(varchar, muro.murId) = numcomen.comUrl LEFT OUTER JOIN " +                             
                "(SELECT        punUrl, SUM(punPuntos) AS total "+                               
                "FROM            puntos "+                               
                "GROUP BY punUrl) AS puntuaciones ON 'M' + CONVERT(varchar, muro.murId) = puntuaciones.punUrl "+
                "WHERE        (muro.murReceptor = '" + usuario + "') " +
                "ORDER BY muro.murFecha DESC";

            SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, con);
            
            res = new DataTable();
            adaptadorSQL.Fill(res);

            con.Close();

            return res;
        }

        public DataTable GetEntrada(string id)
        {
            SqlConnection con = new SqlConnection(CADConexion.connString);

            DataTable res = null;

            con.Open();

           string select = 
               " SELECT        muro.murId, muro.murFecha, muro.murEmisor, muro.murReceptor, muro.murAsunto, muro.murMensaje, usuario.usuNombre, usuario.usuApellido1, usuario.usuApellido2, usuario.usuImagen, puntuaciones.puntosTot "+
               "FROM            muro INNER JOIN usuario "+
               "ON muro.murEmisor = usuario.usuCorreo LEFT OUTER JOIN "+                             
               "(SELECT        punUrl, SUM(punPuntos) AS puntosTot "+                               
               "FROM            puntos "+                               
               "GROUP BY punUrl) AS puntuaciones ON puntuaciones.punUrl = 'M' + CONVERT(varchar, muro.murId) "+                               
               "WHERE        (muro.murId = "+id+") "+                               
               "ORDER BY muro.murFecha DESC";

            SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, con);

            res = new DataTable();
            adaptadorSQL.Fill(res);

            con.Close();

            return res;
        }

        public void AddEntrada(string emisor, string receptor, string mensaje)
        {

            SqlConnection con = new SqlConnection(CADConexion.connString); 
            try
            {

                con.Open();

                new SqlCommand("insert into muro (murEmisor, murReceptor, murMensaje, murFecha) values('" +
                                    emisor + "','" +
                                    receptor + "','" +
                                    mensaje.Replace("\r\n","<br/>") + "','" +
                                    DateTime.Now.ToString() + "');", con).ExecuteNonQuery();
                
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }
        }

        public void AddAviso(string usuario, string aviso, string url)
        {
            SqlConnection con = new SqlConnection(CADConexion.connString);
            try
            {

                con.Open();

                new SqlCommand("insert into muro (murEmisor, murReceptor, murAsunto,murMensaje, murFecha) values('" +
                                    usuario + "','" +
                                    usuario + "','" +
                                    url + "','" +
                                    aviso + "','" +
                                    DateTime.Now.ToString() + "')", con).ExecuteNonQuery();

            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }
        }

        public void DeleteEntrada(string id, string correo)
        {
            DataTable res = null;
            SqlConnection con = new SqlConnection(CADConexion.connString);
            try
            {

                con.Open();


                SqlDataAdapter adaptadorSQL = new SqlDataAdapter("SELECT * from muro where murId = " + id, con);

                res = new DataTable();
                adaptadorSQL.Fill(res);


                if (res.Rows.Count > 0 && 
                        (res.Rows[0]["murEmisor"].ToString() == correo ||
                        res.Rows[0]["murReceptor"].ToString() == correo))
                {
                    new SqlCommand("delete from muro where murId = " + id, con).ExecuteNonQuery();
                }

            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }
        }

    }
}
